home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
byte0387.arc
/
EDGINTON.ARC
/
LIST7.TXT
< prev
Wrap
Text File
|
1986-07-16
|
2KB
|
113 lines
; These routines emulate a push-all of the
; registers and segregs before an interrupt
; is executed, and then pop them in the
; same order.
; Note: cpopt is used for testing so we use
; a ret instead of a iret.
TITLE REGISTER MANIPULATION ROUTINES
SUBTTL Copyright 1986 by Brian Edginton
NAME STORE
INCLUDE DOS.MAC
DSEG
; Register and stack storage structure follows.
S STRUC
RAX DW ?
RBX DW ?
RCX DW ?
RDX DW ?
RSI DW ?
RDI DW ?
RDS DW ?
RCS DW ?
RSS DW ?
RES DW ?
RIP DW ? ; Storage for 2 words
RBP DW ? ; pushed for iret
RFL DW ? ; and flags.
RRT DW ? ; Return address
; pushed for call.
S ENDS
STORAGE S <0,0,0,0,0,0,0,0,0,0,0,0>
ENDDS
PSEG
; name - cpush()
; Pushes all the registers and segregs
; and flags onto the stack. Use with
; cpop() to restore in correct order.
PUBLIC CPUSH
IF LPROG
CPUSH PROC FAR
ELSE
CPUSH PROC NEAR
ENDIF
POP STORAGE.RRT
POP STORAGE.RIP ; SAVE RETI IP,
POP STORAGE.RCS ; SAVE RETI CS,
POP STORAGE.RFL ; SAVE THE FLAGS,
MOV STORAGE.RAX,AX ; AND TUCK AWAY
MOV STORAGE.RBX,BX ; ALL REGISTERS.
MOV STORAGE.RCX,CX
MOV STORAGE.RDX,DX
MOV STORAGE.RDI,DI
MOV STORAGE.RSI,SI
MOV STORAGE.RDS,DS ; GET THE SEGMENT
; MOV STORAGE.RSS,SS ; REGISTERS.
MOV STORAGE.RES,ES
PUSH STORAGE.RRT ; PUT CALL RETURN
; ADDRESS ON STACK.
RET
CPUSH ENDP
PUBLIC CPOP
IF LPROG
CPOP PROC FAR
ELSE
CPOP PROC NEAR
ENDIF
PUSH STORAGE.RFL ; RESTORE FLAGS.
PUSH STORAGE.RCS ; RESTORE CS,
PUSH STORAGE.RIP ; THEN IP.
MOV ES,STORAGE.RES
MOV DS,STORAGE.RDS
MOV SI,STORAGE.RSI
MOV DI,STORAGE.RDI
MOV DX,STORAGE.RDX
MOV CX,STORAGE.RCX
MOV BX,STORAGE.RBX ; READY FOR IRET
MOV AX,STORAGE.RAX ; WITH OLD IP AND
IRET ; STUFF ON STACK.
CPOP ENDP
PUBLIC CPOPT
IF LPROG
CPOPT PROC FAR
ELSE
CPOPT PROC NEAR
ENDIF
PUSH STORAGE.RFL ; RESTORE FLAGS.
PUSH STORAGE.RCS ; RESTORE CS,
PUSH STORAGE.RIP ; THEN IP.
MOV ES,STORAGE.RES
MOV DS,STORAGE.RDS
MOV SI,STORAGE.RSI
MOV DI,STORAGE.RDI
MOV DX,STORAGE.RDX
MOV CX,STORAGE.RCX
MOV BX,STORAGE.RBX ; READY FOR IRET
MOV AX,STORAGE.RAX ; WITH OLD IP AND
RET ; STUFF ON STACK.
CPOPT ENDP
ENDPS
END